Crate datta

source ·
Expand description

datta is a Rust implementation of RFC6570 - URI Template that can process URI Templates up to and including ones designated as Level 4 by the specification. It passes all of the tests in the uritemplate-test test suite.

§Basic Usage

Variable setting can be chained for nice, clean code.

use datta::UriTemplate;

let uri = UriTemplate::new("/view/{object:1}{/object,names}{?query*}")
    .set("object", "lakes")
    .set("names", &["Erie", "Superior", "Ontario"])
    .set("query", &[("size", "15"), ("lang", "en")])
    .build();

assert_eq!(uri, "/view/l/lakes/Erie,Superior,Ontario?size=15&lang=en");

It is not possible to set a variable to the value “undefined”. Instead, simply delete the variable if you have already set it.

let mut t = UriTemplate::new("{hello}");
t.set("hello", "Hello World!");
assert_eq!(t.build(), "Hello%20World%21");

t.delete("hello");
assert_eq!(t.build(), "");

The delete function returns true if the variable existed and false otherwise.

§Supported Types

Any type that implements IntoTemplateVar can be set as the value of a UriTemplate variable. The following implementations are provided by default for each type of variable:

  • Scalar Values: String, &str
  • Lists: Vec<String>, &[String], &[str]
  • Associative Arrays: Vec<(String, String)>, &[(String, String)], &[(&str, &str)], &HashMap<String, String>

In addition, you can implement IntoTemplateVar for your own types. View the documentation for IntoTemplateVar for information on how that works.

Structs§

  • The main struct that processes and builds URI Templates.
  • Variable specification

Enums§

  • Operator prefixes
  • Template components
  • TemplateVar represents the value of a template variable, which can be a scalar (a simple string), a list of strings, or an associative array of strings.
  • Variable specification types

Traits§

  • IntoTemplateVar represents any type that can be converted into a TemplateVar for use as the value of a template variable, such as a String, Vec<String>, or Vec<(String, String)>. Default implementations are available for those three types, as well as the &str versions.